(function($) {
    /**
     * Html绑定表达式解析器.
     */
	ujs.define('bindExp', 'ujs.exp', {
        parse : function(data) {
            //window._data中存放页面的初始数据.
            data = data || window['_data'] || {};
            //所有绑定元素均应用class--bind.
            $('.bind').each(function() {
                var tagName = $(this).get(0).tagName.toLowerCase(), 
                    bindExp = $(this).attr('bindExp'),//使用bindExp可以绑定一段代码， 返回值可选。 
                    key = $(this).attr('bind'),//使用key绑定data中的值。
                    value = data[key];
                //若使用绑定表达式时，将表达式作为函数体，构建临时绑定函数。
                if(bindExp) {
                    var bindExpFun = eval(['(function(d){ ', 'with(d){', '{0}', '}', '})'].join('').format(bindExp));
                    //绑定函数的执行作用域为所属DOM对象.
                    value = bindExpFun.call(this, data);
                }
                //若存在指定的绑定值，或绑定函数有返回值，则应用为DOM的innerHTML或value。
                if(value !== undefined) {
                    switch(tagName) {
                        case "span":
                        case "div":
                        case "b":
                        case "h2":
                        case "h3":
                        case "a":
                            $(this).html(value);
                            break;
                        case "input":
                        case "textarea":
                            $(this).val(value);
                            break;
                    }
                }
            });         
        }
    });
	
	//---------------------------------------------------------------------------------------
	
	$(function() {         
        ujs.exp.bindExp.parse();    //auto parse binded exp when dom ready.
    });
})($);

//示例标记:
/*
    <div class="footer-right">
        Version <span class="bind" bindExp="return proConfig.version"></span>
    </div>

    <img id="logo" class="bind" bindExp="if( logo ) { this.src = '/rest/open/icon' + logo }" src="" onerror="this.src='/images/login/logo.png'"> 

    <p id="pageTitle" class="formHeader" style="padding-top: 10px;">
        Complete signup below to confirm invitation to <span class="bind" bind="firmName" id="firmName"></span> CaseRoom
    </p>
    <p class="required formSep_space_v">
        <label for="email">Email</label>
        <input id="email" readonly="readonly" class="formInput readonly bind" bind="email" />
    </p>
    <p class="required alternative">
        <label for="name">Name</label>
        <input id="name" class="formInput bind" bind="name" />
    </p> 
*/